package com.ffzx.commerce.framework.utils;

import java.lang.reflect.Field;
import java.lang.reflect.Method;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 数据拷贝 仅限于 同个对象的copy
 * 
 * @author zhugj
 * @date 2015年7月25日 下午2:03:29
 * @version 0.1.0
 */
public class BeanCopy {

	public static Logger logger = LoggerFactory.getLogger(BeanCopy.class);

	/**
	 * 对象属性copy
	 * 
	 * @param object
	 *            原对象
	 * @param objectCopy
	 *            目标对象
	 * @return Object
	 * @throws Exception
	 */
	public static void copy(Object object, Object objectCopy) {
		Class<?> classType = object.getClass();
		// 获得对象的所有成员变量
		Field[] fields = classType.getDeclaredFields();
		for (Field field : fields) {
			// 获取成员变量的名字
			String name = field.getName(); // 获取成员变量的名字，此处为id，name,age
			// 获取get和set方法的名字
			String firstLetter = name.substring(0, 1).toUpperCase(); // 将属性的首字母转换为大写
			String getMethodName = "get" + firstLetter + name.substring(1);
			String setMethodName = "set" + firstLetter + name.substring(1);
			Method getMethod = null;
			// 获取方法对象
			try {
				getMethod = classType.getMethod(getMethodName, new Class[] {});
			} catch (Exception e) {
			}
			if (null != getMethod) {
				try {
					// 注意set方法需要传入参数类型
					Method setMethod = classType.getMethod(setMethodName,
							new Class[] { field.getType() });
					// 调用get方法获取旧的对象的值
					Object value = getMethod.invoke(object, new Object[] {});
					if (null != value && !"".equals(value.toString())) {
						// 调用set方法将这个值复制到新的对象中去
						setMethod.invoke(objectCopy, new Object[] { value });
					}
					
				} catch (Exception e) {
					logger.error("Bean Copy error", e);
				}
			}
		}
	}

	public static void main(String[] args) throws Exception {
		
	}

}
